package org.db.ui;

import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.text.DecimalFormat;
import java.util.List;

import javax.swing.ButtonGroup;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JOptionPane;

import org.db.Manager;
import org.db.dao.KruemmungslinienDAO;
import org.db.dao.Uebergangsbogen;
import org.db.dao.UeberhoehungslinienDAO;
import org.db.dao.Ueberhoehungsrampe;
import org.db.dao.change.AddProjektElement;
import org.db.dao.change.RemoveProjektElement;
import org.db.dao.change.UpdateProjektElement;

/**
 *
 * @author Lutz
 */
public class KruemmungslinienDialog extends CloseCommitDialog implements ActionListener, KeyListener, MouseListener {

    /**
	 * 
	 */
	private static final long serialVersionUID = -622284041165411269L;
	
	private static final String StationException = "Bitte geben Sie eine Stationierung ein!" ;
	private static final String EndStationException = "Bitte überprüfen Sie den Wert für die Endstationierung!";
	private static final String RadiusException = "Bitte geben Sie einen Radius ein!";
	private static final String LaengeException = "Bitte überprüfen Sie die Länge für den Übergangsbogen!";
	private static final String BetaException = "Bitte überprüfen Sie den Wert für Beta!";
	private static final String UeberhException = "Bitte geben Sie eine Überhöhung zum Radius ein!";
	private static final String AnfStationException = "Bitte überprüfen Sie den Wert für die Anfangsstationierung!" ;
	
	private javax.swing.JButton jButtonCancel;
    private javax.swing.JButton jButtonNext;
    private javax.swing.JButton jButtonOK;
    private javax.swing.JCheckBox jCheckBoxLinksBogen;
    private javax.swing.JCheckBox jCheckBoxRechtsBogen;
    private javax.swing.JLabel jLabelLaengeUeBogen;
    private javax.swing.JComboBox jComboBoxUeBogen;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel16;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JLabel jLabelUeArt;
    private javax.swing.JScrollPane jScrollPane1;
    private KruemmungslinienTable table;
    private DoubleTextField jTextBeta;
    private DoubleTextField jTextLaengeUeBogen;
    private DoubleTextField jTextRadius;
    private DoubleTextField jTextStation;
    private DoubleTextField jTextStationE;
    private javax.swing.JLabel jLabelGleistyp;
    private javax.swing.JComboBox jComboBoxElement;
    private javax.swing.JLabel jLabel4;
    private IntegerTextField jTextUeberhoehung;
	
	private int returnValue = 0;
	
	private KruemmungslinienDAO lastAddedDaoK;

	private DecimalFormat format1 = new DecimalFormat("0");
	private DecimalFormat format2 = new DecimalFormat("0.000");
	private DecimalFormat format3 = new DecimalFormat("0.0000");
	
	private KruemmungslinienDAO element2Edit = null;
	
	
	
	public KruemmungslinienDialog(JDialog owner) {
		super(owner);
		setModal(true);
		setTitle("Krümmungslinie");
        initComponents();
    }
	
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jTextStation = new DoubleTextField();
        jTextRadius = new DoubleTextField();
        jLabel2 = new javax.swing.JLabel();
        jTextBeta = new DoubleTextField();
        jLabel16 = new javax.swing.JLabel();
        jLabelLaengeUeBogen = new javax.swing.JLabel();
        jTextLaengeUeBogen = new DoubleTextField();
        jComboBoxUeBogen = new javax.swing.JComboBox();
        jButtonOK = new javax.swing.JButton();
        jButtonNext = new javax.swing.JButton();
        jButtonCancel = new javax.swing.JButton();
        jCheckBoxLinksBogen = new javax.swing.JCheckBox();
        jCheckBoxLinksBogen.setSelected(true);
        jCheckBoxRechtsBogen = new javax.swing.JCheckBox();
        ButtonGroup buttonCheckBox = new ButtonGroup();
        buttonCheckBox.add(jCheckBoxLinksBogen);
        buttonCheckBox.add(jCheckBoxRechtsBogen);
        jLabelUeArt = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        jLabel9 = new javax.swing.JLabel();
        jTextStationE = new DoubleTextField();
        jScrollPane1 = new javax.swing.JScrollPane();
        table = new KruemmungslinienTable();
        table.addKeyListener(this);
        table.addMouseListener(this);
        jLabelGleistyp = new javax.swing.JLabel();
        jLabelGleistyp.setText(Manager.getInstance().getCurrentGleis().toString());
        jLabel4 = new javax.swing.JLabel();
        jComboBoxElement = new javax.swing.JComboBox();
        jTextUeberhoehung = new IntegerTextField();
        jLabel5 = new javax.swing.JLabel();

        setPreferredSize(new java.awt.Dimension(900, 520));
        setResizable(false);
        
        jTextRadius.setVisible(false);
        jTextUeberhoehung.setVisible(false);

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 18));
        jLabel1.setText("Krümmungslinie");
        
        jLabel4.setFont(new java.awt.Font("Tahoma", 1, 12)); 
        jLabel4.setText("Elementtyp");

        jLabel3.setFont(new java.awt.Font("Tahoma", 1, 12));
        jLabel3.setText("Anfangsstation");

        jTextStation.setVerifyInputWhenFocusTarget(false);
        Double stationAnf = Manager.getInstance().getGleisElemente().get(returnValue).getAnfangsStation();
        jTextStation.setText(stationAnf.toString());

        jLabel2.setFont(new java.awt.Font("Tahoma", 1, 12));
        jLabel2.setText("Radius r=");
        jLabel2.setVisible(false);

        jLabel16.setFont(new java.awt.Font("Tahoma", 1, 12));
        jLabel16.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jLabel16.setText("RP  β=");

        jTextLaengeUeBogen.setToolTipText("Länge Überangsbogen");
        jTextLaengeUeBogen.setVisible(false);
        
        jLabelLaengeUeBogen.setFont(new java.awt.Font("Tahoma", 1, 12));
        jLabelLaengeUeBogen.setText("lU =");
        jLabelLaengeUeBogen.setVisible(false);
        
        jLabelUeArt.setFont(new java.awt.Font("Tahoma", 3, 12));
        jLabelUeArt.setText("Klothoide");
        jLabelUeArt.setVisible(false);
        
        jComboBoxElement.setEditable(false);
        jComboBoxElement.setFont(new java.awt.Font("Tahoma", 1, 12)); 
        jComboBoxElement.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Gerade", "Kreisbogen", "Übergangsbogen"}));
        jComboBoxElement.addActionListener(new ActionListener() {
        	public void actionPerformed(ActionEvent e) {
        		JComboBox jComboBoxElement = (JComboBox) e.getSource();
        		String selectedItem = jComboBoxElement.getSelectedItem().toString();
				showInputFieldsForElement(selectedItem);
        	}
        });
        
        jComboBoxUeBogen.setEditable(false);
        jComboBoxUeBogen.setVisible(false);
        jComboBoxUeBogen.setFont(new java.awt.Font("Tahoma", 1, 12));
        jComboBoxUeBogen.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "UA", "UAs", "UAB", "UE", "UEs", "UEB", 
        		"UAss", "UEss", "UEBs",  "UABs"}));
        jComboBoxUeBogen.addActionListener(new ActionListener(){        	
			public void actionPerformed(ActionEvent e) {
				JComboBox jComboBoxUeBogen = (JComboBox) e.getSource();
				Object selectedItemUeBogen = jComboBoxUeBogen.getSelectedItem();
				showInputFieldsForUeBogen(selectedItemUeBogen);
			}
        });
        
        jButtonOK.setFont(new java.awt.Font("Tahoma", 1, 12));
        jButtonOK.setText("Eingabe beenden");
        jButtonOK.setToolTipText("Prüfen und Speichern der Eingaben. Zurück zum Auswahlfenster.");
        jButtonOK.addActionListener(this);
        jButtonOK.addKeyListener(this);
        
        jButtonNext.setFont(new java.awt.Font("Tahoma", 1, 12));
        jButtonNext.setText("Element hinzufügen");
        jButtonNext.setToolTipText("Speichern der Eingaben in die Liste. Leeren der Textfelder für nächstes Element.");
        jButtonNext.addActionListener(this);
        jButtonNext.addKeyListener(this);
        
        jButtonCancel.setFont(new java.awt.Font("Tahoma", 1, 12));
        jButtonCancel.setText("Abbrechen");
        jButtonCancel.setToolTipText("Verwerfen der Eingaben. zurück zum Hauptmenü.");
        jButtonCancel.addActionListener(this);
        jButtonCancel.addKeyListener(this);

        jCheckBoxLinksBogen.setFont(new java.awt.Font("Tahoma", 1, 12));
        jCheckBoxLinksBogen.setText("Linksbogen");
        jCheckBoxLinksBogen.setVisible(false);
        

        jCheckBoxRechtsBogen.setFont(new java.awt.Font("Tahoma", 1, 12));
        jCheckBoxRechtsBogen.setText("Rechtsbogen");
        jCheckBoxRechtsBogen.setVisible(false);

        jLabel6.setFont(new java.awt.Font("Tahoma", 1, 12));
        jLabel6.setText("Übergangsbogen");
        jLabel6.setVisible(false);
        

        jLabel9.setFont(new java.awt.Font("Tahoma", 1, 12));
        jLabel9.setText("Endstationierung");

        jScrollPane1.setViewportView(table);

        jLabelGleistyp.setFont(new java.awt.Font("Tahoma", 3, 12)); 
        jLabelGleistyp.setText(Manager.getInstance().getCurrentGleis().toString());
        
        jLabel5.setFont(new java.awt.Font("Tahoma", 1, 12));
        jLabel5.setText("U = ");
        jLabel5.setVisible(false);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jLabel1))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(56, 56, 56)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jLabel3)
                            .addComponent(jLabel2)
                            .addComponent(jLabel6))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(jTextStation, javax.swing.GroupLayout.DEFAULT_SIZE, 62, Short.MAX_VALUE)
                            .addComponent(jTextRadius)
                            .addComponent(jLabel4)
                            .addComponent(jComboBoxUeBogen, 0, 0, Short.MAX_VALUE))
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jLabelLaengeUeBogen)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jTextLaengeUeBogen, javax.swing.GroupLayout.PREFERRED_SIZE, 59, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addComponent(jComboBoxElement, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(jLabel9)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(jTextStationE, javax.swing.GroupLayout.PREFERRED_SIZE, 62, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addGap(18, 18, 18)
                                        .addComponent(jLabel16)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(jTextBeta, javax.swing.GroupLayout.PREFERRED_SIZE, 59, javax.swing.GroupLayout.PREFERRED_SIZE))
                                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                                        .addComponent(jCheckBoxLinksBogen)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(jCheckBoxRechtsBogen)))
                                .addGap(24, 24, 24)
                                .addComponent(jLabel5)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jTextUeberhoehung, javax.swing.GroupLayout.PREFERRED_SIZE, 44, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addComponent(jLabelUeArt, javax.swing.GroupLayout.PREFERRED_SIZE, 339, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(48, 48, 48)
                        .addComponent(jLabelGleistyp, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jButtonOK, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jButtonCancel, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 866, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jButtonNext, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE))))
                .addContainerGap(385, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel1)
                        .addGap(18, 18, 18)
                        .addComponent(jLabelGleistyp)
                        .addGap(29, 29, 29)
                        .addComponent(jLabel4))
                    .addComponent(jComboBoxElement, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(30, 30, 30)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel3)
                    .addComponent(jTextStation, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel9)
                    .addComponent(jTextStationE, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel16)
                    .addComponent(jTextBeta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(jTextRadius, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jCheckBoxLinksBogen)
                    .addComponent(jCheckBoxRechtsBogen)
                    .addComponent(jTextUeberhoehung, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel5))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jComboBoxUeBogen, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel6)
                    .addComponent(jLabelLaengeUeBogen)
                    .addComponent(jTextLaengeUeBogen, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabelUeArt)
                .addGap(16, 16, 16)
                .addComponent(jButtonNext, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 139, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButtonCancel, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButtonOK, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(217, Short.MAX_VALUE))
        );
        validateInput();
        continueInput();
        isValidSession();
        pack();
    }  
    /**
     * Leeren und Vorbereiten der Textfelder für folgendes Element
     */
    public void continueInput() {
    	if (!table.isEmpty()) {
    		lastAddedDaoK = Manager.getInstance().getKruemmungslinienElemente().last();
    		jTextStation.setText(format2.format(Double.valueOf(lastAddedDaoK.getEndstationierungInMeter())));
    		jTextStationE.requestFocusInWindow();
    		if (lastAddedDaoK.getUeberhoehung() != 0) {
    			jTextUeberhoehung.setText(Integer.valueOf(lastAddedDaoK.getUeberhoehung()).toString());
    		}
    		jComboBoxElement.setSelectedItem(lastAddedDaoK.getElement().toString());
    		switchComboBox();
    	}  	
    }
    
    /**
     * Anpassen des Dialogs, abhängig vom Geomatrieelement
     * @param element
     */
    private void showInputFieldsForElement(String element){
    	
		if ("Gerade".equals(element)) {
			jTextStationE.setVisible(true);
			jLabel3.setText("Anfangsstationierung");
			jLabel9.setText("Endstationierung");
			jLabel9.setVisible(true);
			jTextBeta.setVisible(true);
			jLabel16.setVisible(true);
			jTextStationE.requestFocusInWindow();
			
			jTextRadius.setVisible(false);
			jTextRadius.setText("");
			jLabel2.setVisible(false);
			jCheckBoxLinksBogen.setVisible(false);
			jCheckBoxRechtsBogen.setVisible(false);
			jComboBoxUeBogen.setVisible(false);
			jLabelLaengeUeBogen.setVisible(false);
			jLabelUeArt.setVisible(false);
			jTextLaengeUeBogen.setVisible(false);
			jTextLaengeUeBogen.setText("");
			jTextUeberhoehung.setVisible(false);
			jTextUeberhoehung.setText("");
			jLabel5.setVisible(false);
	
		} else if ("Kreisbogen".equals(element)) {
			jTextRadius.setVisible(true);
			jLabel2.setVisible(true);
			jLabel3.setText("BA");
			jLabel9.setText("BE");
			jCheckBoxLinksBogen.setVisible(true);
			jCheckBoxRechtsBogen.setVisible(true);
			jTextStationE.setVisible(true);
			jTextUeberhoehung.setVisible(true);
			jLabel5.setVisible(true);	
			jTextStationE.requestFocusInWindow();
			
			jComboBoxUeBogen.setVisible(false);
			jLabelLaengeUeBogen.setVisible(false);
			jLabelUeArt.setVisible(false);
			jTextLaengeUeBogen.setVisible(false);
			jTextLaengeUeBogen.setText("");
			jLabel16.setVisible(false);
			jTextBeta.setVisible(false);
			jTextBeta.setText("");
		} else if ("Übergangsbogen".equals(element)) {
			jComboBoxUeBogen.setVisible(true);
			jLabelLaengeUeBogen.setVisible(true);
			jLabelUeArt.setVisible(true);
			jTextLaengeUeBogen.setVisible(true);
			jTextStationE.setVisible(true);
			jTextStationE.requestFocusInWindow();
			
			jTextRadius.setVisible(false);
			jTextRadius.setText("");
			jLabel2.setVisible(false);
			jLabel3.setText("UA");
			jLabel9.setText("UE");
			jCheckBoxLinksBogen.setVisible(false);
			jCheckBoxRechtsBogen.setVisible(false);
			jLabel16.setVisible(false);
			jTextBeta.setVisible(false);
			jTextBeta.setText("");
			jTextUeberhoehung.setVisible(false);
			jTextUeberhoehung.setText("");
			jLabel5.setVisible(false);					
			
		} 
		pack();
    }
    
    /**
     * Anpassen des Dialogs, abhängig vom Übergangsbogen
     * @param selectedItemUeBogen
     */
    private void showInputFieldsForUeBogen ( Object selectedItemUeBogen) {
    	if ("UA".equals(selectedItemUeBogen)) {
			jLabelUeArt.setText("Klothoide");
			jLabelLaengeUeBogen.setText("lU =");
			jLabel3.setText("UA");
			jLabel9.setText("UE");
		}  if ("UE".equals(selectedItemUeBogen)) {
			jLabelUeArt.setText("Klothoide");
			jLabelLaengeUeBogen.setText("lU =");
			jLabel3.setText("UE");
			jLabel9.setText("UA");
		}  if ("UAs".equals(selectedItemUeBogen)) {
			jLabelUeArt.setText("S- förmig nach Schramm");
			jLabelLaengeUeBogen.setText("lUs =");
			jLabel3.setText("UAs");
			jLabel9.setText("UEs");
		}  if ("UEs".equals(selectedItemUeBogen)) {
			jLabelUeArt.setText("S- förmig nach Schramm");
			jLabelLaengeUeBogen.setText("lUs =");
			jLabel3.setText("UEs");
			jLabel9.setText("UAs");
		}  if ("UAB".equals(selectedItemUeBogen)) {
			jLabelUeArt.setText("S- förmig nach Bloss");
			jLabelLaengeUeBogen.setText("lUB =");
			jLabel3.setText("UAB");
			jLabel9.setText("UEB");
		}  if ("UEB".equals(selectedItemUeBogen)) {
			jLabelUeArt.setText("S- förmig nach Bloss");
			jLabelLaengeUeBogen.setText("lUB =");
			jLabel3.setText("UEB");
			jLabel9.setText("UAB");
		}if ("UAss".equals(selectedItemUeBogen)) {
			jLabelUeArt.setText("Gleisschere nach Schramm");
			jLabelLaengeUeBogen.setText("lUss =");
			jLabel3.setText("UAss");
			jLabel9.setText("UEss");
		}if ("UABs".equals(selectedItemUeBogen)) {
			jLabelUeArt.setText("Gleisschere nach Bloss");
			jLabelLaengeUeBogen.setText("lUBs =");
			jLabel3.setText("UABs");
			jLabel9.setText("UEBs");
		} if ("UEss".equals(selectedItemUeBogen)) {
			jLabelUeArt.setText("Gleisschere nach Schramm");
			jLabelLaengeUeBogen.setText("lUss =");
			jLabel3.setText("UEss");
			jLabel9.setText("UAss");
		}if ("UEBs".equals(selectedItemUeBogen)) {
			jLabelUeArt.setText("Gleisschere nach Bloss");
			jLabelLaengeUeBogen.setText("lUBs =");
			jLabel3.setText("UEBs");
			jLabel9.setText("UABs");
		}
    }
    
    public int showKruemmungslinienDialog() {    
	    setVisible(true);
	    return returnValue;
    }
 
    /**
     * Methode löscht alle bisherigen Überhöhungselemente, und erzeugt für alle Krümmungslinienelemente, die zum Zeitpunkt des Methodenaufrufs in
     * der Tablle existieren, falls notwendig ein passendes Überhöhungslinienelement.
     */
   private void createUeberhoehungen() {
	   //alten Überhöhungselemente erstmal löschen
	   Manager.getInstance().getUeberhoehungslinienElemente().clear();
	   List<KruemmungslinienDAO> kruemmungslinienElemente = table.getKruemmungslinienElemente();

	   UeberhoehungslinienDAO lastDAOU = null;
	   KruemmungslinienDAO daoK;
		for(int i = 0; i < kruemmungslinienElemente.size(); i++) {
			daoK = kruemmungslinienElemente.get(i);
			
			if(daoK.getElement().equals("Übergangsbogen") || daoK.getUeberhoehung() > 0){
				int ueberhoehungInMM = Integer.valueOf(daoK.getUeberhoehung()) != 0 ? Integer.valueOf(daoK.getUeberhoehung()) : 0;
				double stationierungInMeterUe = daoK.getStationierungInMeter();
				double endstationierungInMeterUE = daoK.getEndstationierungInMeter();
				
				Ueberhoehungsrampe ueberhoehungsrampe = null;
					if (daoK.getUebergangsbogen() == Uebergangsbogen.UA) {
						ueberhoehungsrampe = Ueberhoehungsrampe.RA;
					}else if (daoK.getUebergangsbogen() == Uebergangsbogen.UE) {
						ueberhoehungsrampe = Ueberhoehungsrampe.RE;
					}else if (daoK.getUebergangsbogen() == Uebergangsbogen.UAs) {
						ueberhoehungsrampe = Ueberhoehungsrampe.RAs;
					}else if (daoK.getUebergangsbogen() == Uebergangsbogen.UEs) {
						ueberhoehungsrampe = Ueberhoehungsrampe.REs;
					}else if (daoK.getUebergangsbogen() == Uebergangsbogen.UAB) {
						ueberhoehungsrampe = Ueberhoehungsrampe.RAB;
					}else if (daoK.getUebergangsbogen() == Uebergangsbogen.UEB) {
						ueberhoehungsrampe = Ueberhoehungsrampe.REB;
					}else if (daoK.getUebergangsbogen() == Uebergangsbogen.UAss) {
						ueberhoehungsrampe = Ueberhoehungsrampe.RAss;
					}else if (daoK.getUebergangsbogen() == Uebergangsbogen.UABs) {
						ueberhoehungsrampe = Ueberhoehungsrampe.RABs;
					}else if (daoK.getUebergangsbogen() == Uebergangsbogen.UEss) {
						ueberhoehungsrampe = Ueberhoehungsrampe.REss;
					}else if (daoK.getUebergangsbogen() == Uebergangsbogen.UEBs) {
						ueberhoehungsrampe = Ueberhoehungsrampe.REBs;
					}else {
						ueberhoehungsrampe = Ueberhoehungsrampe.NONE;
					}	
										
				double laengeRampe = daoK.getLaengeUeBogen() != 0 ? daoK.getLaengeUeBogen() : 0;
				
				UeberhoehungslinienDAO daoU = new UeberhoehungslinienDAO(stationierungInMeterUe, ueberhoehungInMM, endstationierungInMeterUE, ueberhoehungsrampe,
						 laengeRampe);
				if(i > 0){
					UeberhoehungslinienDAO rampe = createRampeIfNeeded(kruemmungslinienElemente.get(i-1), kruemmungslinienElemente.get(i));
					if(rampe != null){
						lastDAOU.setEndstationierungInMeterUE(rampe.getStationierungInMeterUe());
						daoU.setStationierungInMeterUe(rampe.getEndstationierungInMeterUE());
						Manager.getInstance().addProjektChange(new AddProjektElement(rampe));
					}
				}
				
				
				lastDAOU = daoU;
				
				Manager.getInstance().addProjektChange(new AddProjektElement(daoU));
			} else {
				
			}
		}
    }
		
    @Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource() == jButtonOK){
					
			if(isValidSession()){
    			//Änderungen in XML-Datei übernehmen
    			createUeberhoehungen();
    			Manager.getInstance().applyChanges();
    			setVisible(false);
    			dispose();
    		} else {
    			JOptionPane.showMessageDialog(this, "Bitte überprüfen Sie die gelben Fehler!");
    		}
		} else if(e.getSource() == jButtonCancel){
			returnValue = JOptionPane.CANCEL_OPTION;
			askForClosing();
			
		} else if(e.getSource() == jButtonNext){
			if (isValidInput()){			
				
				String element = jComboBoxElement.getSelectedItem().toString();	
				double stationierungInMeter = Double.valueOf(jTextStation.getText());
				double endstationierungInMeter = !jTextStationE.getText().isEmpty() ? Double.valueOf(jTextStationE.getText()) : 0;
				Uebergangsbogen uebergangsbogen = (Uebergangsbogen) (!jTextLaengeUeBogen.getText().isEmpty() ? Uebergangsbogen.valueOf(jComboBoxUeBogen.getSelectedItem().toString()) : Uebergangsbogen.NONE);
				double radius = !jTextRadius.getText().isEmpty() && jCheckBoxLinksBogen.isSelected() ? (Double.valueOf(jTextRadius.getText()))*(-1) : !jTextRadius.getText().isEmpty() && !jCheckBoxLinksBogen.isSelected() ? Double.valueOf(jTextRadius.getText()) : 0;
				double rp = !jTextBeta.getText().isEmpty() ? Double.valueOf(jTextBeta.getText()) : 0;
				double laengeUeBogen = !jTextLaengeUeBogen.getText().isEmpty() ? Double.valueOf(jTextLaengeUeBogen.getText()) : 0;
				int ueberhoehung = !jTextUeberhoehung.getText().isEmpty() ? Integer.valueOf(jTextUeberhoehung.getText()) : 0;
				
				KruemmungslinienDAO daoK = new KruemmungslinienDAO(element, stationierungInMeter, radius, ueberhoehung, endstationierungInMeter,
						rp, uebergangsbogen, laengeUeBogen);
				if(element2Edit != null){
					table.replaceKruemmungslinienElement(element2Edit, daoK);
					Manager.getInstance().addProjektChange(new UpdateProjektElement(element2Edit, daoK));
					element2Edit = null;
				} else {
					table.addKruemmungslinienElement(daoK);
					Manager.getInstance().addProjektChange(new AddProjektElement(daoK));
				}				
				lastAddedDaoK = daoK;				

				clearInput();
				validateInput();
				isValidSession();
				returnValue = JOptionPane.OK_OPTION;
			}
		}		
	}
    /**
     * Test ob die Änderungen in der aktuellen Sitzung gültig sind.
     * @return
     */
    private boolean isValidSession() {
    	table.resetHighlighting();
    	List<KruemmungslinienDAO> kruemmungslinienElemente = table.getKruemmungslinienElemente();
    	KruemmungslinienDAO el1;
    	KruemmungslinienDAO el2;
//    	KruemmungslinienDAO el3;
//    	KruemmungslinienDAO el4;
    	for(int i = 0; i < kruemmungslinienElemente.size()-1; i++) {
    		el1 = kruemmungslinienElemente.get(i);
    		el2 = kruemmungslinienElemente.get(i+1);
//    		el3 = kruemmungslinienElemente.get(0);
//    		el4 = kruemmungslinienElemente.get(i++);
    		if(el1.getEndstationierungInMeter() != el2.getStationierungInMeter()){
    			table.highlightCell(i, 2);
    			table.highlightCell(i+1, 1);
    			return false;
    		} 
//    		else if (el4.getElement().equals("Übergangsbogen") && el1.getUebergangsbogen().toString().equals("UA")) {
//    			table.highlightCell(i++, 0);
//    		}
//    		else if (el4.getElement().equals("Übergangsbogen") && el1.getUebergangsbogen().toString().equals("UAs")) {
//    			table.highlightCell(i++, 0);
//    		}
//    		else if (el4.getElement().equals("Übergangsbogen") && el1.getUebergangsbogen().toString().equals("UAB")) {
//    			table.highlightCell(i++, 0);
//    		}
//    		else if (el3.getElement().equals("Übergangsbogen") && el1.getUebergangsbogen().toString().equals("UE")) {
//    			table.highlightCell(0, 0);
//    		}
//    		else if (el3.getElement().equals("Übergangsbogen") && el1.getUebergangsbogen().toString().equals("UEs")) {
//    			table.highlightCell(0, 0);
//    		}
//    		else if (el3.getElement().equals("Übergangsbogen") && el1.getUebergangsbogen().toString().equals("UEB")) {
//    			table.highlightCell(0, 0);
//    		}
    		else if (el1.getRadius() < 0 && el2.getRadius() > 0 && el1.getUeberhoehung() != 0) {
    			table.highlightCell(i, 3);
    			table.highlightCell(i+1, 3);
    		}
    		else if (el1.getRadius() > 0 && el2.getRadius() < 0 && el1.getUeberhoehung() != 0) {
    			table.highlightCell(i, 3);
    			table.highlightCell(i+1, 3);
    		}
    		else if (el1.getElement().equals("Gerade") && el2.getElement().equals("Gerade") && el1.getRp() == 0) {
    			table.highlightCell(i, 0);
    			table.highlightCell(i+1, 0);
    			table.highlightCell(i, 5);
    			return false;
    		}
//    		else if (el3.getElement().equals("Gerade") && el2.getElement().equals("Gerade") && el1.getRp() == 0) {
//    			table.highlightCell(i, 0);
//    			table.highlightCell(i+1, 0);
//    			table.highlightCell(i, 5);
//    			return false;
//    		}
    		else if (el1.getElement().equals("Kreisbogen") && el1.getUeberhoehung() != 0 && el2.getElement().equals("Gerade")) {
    			table.highlightCell(i, 0);
    			table.highlightCell(i+1, 0);
    			table.highlightCell(i, 4);
    			return false;
    		}
    		else if (el2.getElement().equals("Kreisbogen") && el2.getUeberhoehung() != 0 && el1.getElement().equals("Gerade")) {
    			table.highlightCell(i, 0);
    			table.highlightCell(i+1, 0);
    			table.highlightCell(i+1, 4);
    			return false;
    		}
    		else if (el2.getElement().equals("Kreisbogen") && el2.getUeberhoehung() != 0 && el1.getUebergangsbogen().toString().equals("UE")) {
    			table.highlightCell(i+1, 0);
     			table.highlightCell(i, 6);
     			table.highlightCell(i+1, 4);
     			return false;
    		 }else if (el2.getElement().equals("Kreisbogen") && el2.getUeberhoehung() != 0 && el1.getUebergangsbogen().toString().equals("UEs")) {
    			table.highlightCell(i+1, 0);
     			table.highlightCell(i, 6);
     			table.highlightCell(i+1, 4);
     			return false;
    		 }else if (el2.getElement().equals("Kreisbogen") && el2.getUeberhoehung() != 0 && el1.getUebergangsbogen().toString().equals("UEB")) {
    			table.highlightCell(i+1, 0);
     			table.highlightCell(i, 6);
     			table.highlightCell(i+1, 4);
     			return false;
    		 }else if (el1.getElement().equals("Kreisbogen") && el1.getUeberhoehung() != 0 && el2.getUebergangsbogen().toString().equals("UAB")) {
    			table.highlightCell(i, 0);
      			table.highlightCell(i+1, 6);
      			table.highlightCell(i, 4);
      			return false;
    		 }else if (el1.getElement().equals("Kreisbogen") && el1.getUeberhoehung() != 0 && el2.getUebergangsbogen().toString().equals("UAs")) {
    			table.highlightCell(i, 0);
      			table.highlightCell(i+1, 6);
      			table.highlightCell(i, 4);
      			return false;
    		 }else if (el1.getElement().equals("Kreisbogen") && el1.getUeberhoehung() != 0 && el2.getUebergangsbogen().toString().equals("UA")) {
    			table.highlightCell(i, 0);
      			table.highlightCell(i+1, 6);
      			table.highlightCell(i, 4);
      			return false;
    		 }else if(el1.getElement().equals("Gerade") && el2.getElement().equals("Übergangsbogen") && el2.getUebergangsbogen().toString().equals("UEB")) {
    			 table.highlightCell(i, 0);
    			 table.highlightCell(i+1, 0);
    			 table.highlightCell(i+1, 6);
    			 return false;
    		 }else if(el1.getElement().equals("Gerade") && el2.getElement().equals("Übergangsbogen") && el2.getUebergangsbogen().toString().equals("UE")) {
    			 table.highlightCell(i, 0);
    			 table.highlightCell(i+1, 0);
    			 table.highlightCell(i+1, 6);
    			 return false;
    		 }else if(el1.getElement().equals("Gerade") && el2.getElement().equals("Übergangsbogen") && el2.getUebergangsbogen().toString().equals("UEs")) {
    			 table.highlightCell(i, 0);
    			 table.highlightCell(i+1, 0);
    			 table.highlightCell(i+1, 6);
    			 return false;
    		 } else if (el1.getElement().equals("Gerade") && el1.getRp() != 0 && !el2.getElement().equals("Gerade")) {
    			 table.highlightCell(i, 0);
    			 table.highlightCell(i, 5);
    			 table.highlightCell(i+1, 0);
    		 }
    	}
    	
    	return true;
    }
    /**
	 * Erzwingen von mindestens einer kompletten Eingabe zur Krümmung
	 */
    private void validateInput(){
    	jButtonOK.setEnabled(!table.isEmpty());
    }
    
    /**
     * Test ob die aktuellen Eingaben gültig sind.
     * @return
     */
    
    private boolean isValidInput(){
		Integer v = Manager.getInstance().getProjekt().getGeschwindigkeit();
		Double stationAnf = Manager.getInstance().getGleisElemente().get(returnValue).getAnfangsStation();
		
		if (table.isEmpty() && 
			Math.abs(Double.valueOf(jTextStation.getText())-Manager.getInstance().getGleisElemente().get(returnValue).getAnfangsStation()) >= 1)  {
			JOptionPane.showMessageDialog(this, AnfStationException,
			        "Falsche Anfangsstationierung", JOptionPane.WARNING_MESSAGE);
			jTextStation.setText(stationAnf.toString());
			return false;			
		}
    	if (jTextStation.getText().isEmpty()){
    		JOptionPane.showMessageDialog(this, StationException,
			        "Fehlende Stationierung", JOptionPane.WARNING_MESSAGE);
			return false;
    	}  if (jTextStationE.isVisible()) {
    		if (jTextStationE.getText().isEmpty()){
        		JOptionPane.showMessageDialog(this, EndStationException,
    			        "Falscher Wert für Endstationierung", JOptionPane.WARNING_MESSAGE);
    			return false;
        	}else if (Double.valueOf(jTextStationE.getText()) <= Double.valueOf(jTextStation.getText())) {
    			JOptionPane.showMessageDialog(this, EndStationException,
    			        "Falscher Wert für Endstationierung", JOptionPane.WARNING_MESSAGE);
    			return false;  
        	}
    	}  if (jTextBeta.isVisible()) {    		
    		if (!jTextBeta.getText().isEmpty()) {
    			try {				
    				if (Double.valueOf(jTextBeta.getText()) >= 200.063662){
					JOptionPane.showMessageDialog(this, BetaException,
					        "Beta außerhalb des Wertebreichs", JOptionPane.WARNING_MESSAGE);	
					return false;				
    				} else  {			
    					try {						
    						if (Double.valueOf(jTextBeta.getText()) <= 199.936338){
							JOptionPane.showMessageDialog(this, BetaException,
							        "Beta außerhalb des Wertebreichs", JOptionPane.WARNING_MESSAGE);
							return false;						
    						}					
    					} catch (HeadlessException e1) {
						e1.printStackTrace();
					
    					}
    				}
    			} catch (HeadlessException e1) {
				e1.printStackTrace();			
    			}     		
    		}
    	}  if (jTextRadius.isVisible()) {
    		if (jTextRadius.getText().isEmpty()) {
    			JOptionPane.showMessageDialog(this, RadiusException,
    			        "Fehlender Radius", JOptionPane.WARNING_MESSAGE);
    			return false;
    		}
    		else if ((7.1*v*v)/Double.valueOf(jTextRadius.getText()) >= 15 && jTextUeberhoehung.getText().isEmpty()) {
    			String ueberhNeu = format1.format((7.1*v*v)/Integer.valueOf(jTextRadius.getText()));
    			jTextUeberhoehung.setText(ueberhNeu.toString());
    			JOptionPane.showMessageDialog(this, UeberhException,
    			        "Fehlende Überhöhung", JOptionPane.WARNING_MESSAGE);
    			return false;    			
    		}				
		} if (jTextLaengeUeBogen.isVisible()) {    	
    		if (jTextLaengeUeBogen.getText().isEmpty()) {
    			JOptionPane.showMessageDialog(this, LaengeException,
    			        "Länge UeBogen", JOptionPane.WARNING_MESSAGE);
    			return false;
    		} else if (Math.abs(Double.valueOf(jTextStationE.getText())-Double.valueOf(jTextStation.getText())-Double.valueOf(jTextLaengeUeBogen.getText())) >= 0.1) {
    			JOptionPane.showMessageDialog(this, LaengeException,
    			        "Länge UeBogen", JOptionPane.WARNING_MESSAGE);
    			return false;
    		}
    	}    	
    	return true;
    }
    
    /*
     * Iteriert über alle Überhöhungen und fügt zwischen 2 aufeinanderfolgenden Kreisbogen eine Rampe ein.
     */
    private UeberhoehungslinienDAO createRampeIfNeeded(KruemmungslinienDAO daoK1, KruemmungslinienDAO daoK2){
    	UeberhoehungslinienDAO daoU = null;
    	if(daoK1.getElement().equals("Kreisbogen") && daoK2.getElement().equals("Kreisbogen")
    			&& daoK1.getUeberhoehung() != 0 && daoK2.getUeberhoehung() != 0){
    		int v = Manager.getInstance().getProjekt().getGeschwindigkeit();
    		int u1 = daoK1.getUeberhoehung();
    		int u2 = daoK2.getUeberhoehung();
    		double station_2 = daoK2.getStationierungInMeter();
    		int du = Math.abs(u2-u1);
    		double lr = 8 * v * du / 1000.0;
    		Ueberhoehungsrampe rampenID = ((u2 - u1) < 1) ? Ueberhoehungsrampe.RE : Ueberhoehungsrampe.RA;
    		double station_2_1 = station_2 - lr/2;
    		double station_2_2 = station_2_1 + lr;
    		
    		daoU = new UeberhoehungslinienDAO(station_2_1, 0, station_2_2, rampenID, lr);
    		
    	}
    	return daoU;
    	
    }

    
    /**
     * Alle Eingabeelemente zurücksetzen.
     */
    private void clearInput(){
    	jTextBeta.setText("");
    	if(!jTextStationE.getText().isEmpty()){
    		Double stationNeu = Double.valueOf(jTextStationE.getText());
        	jTextStation.setText(format2.format((stationNeu)));
    	}
    	jCheckBoxLinksBogen.setSelected(false);
    	jCheckBoxRechtsBogen.setSelected(false);
    	jTextStationE.setText("");
    	jTextRadius.setText("");
    	jTextLaengeUeBogen.setText("");
    	switchComboBox();
    	jTextUeberhoehung.setText("");
    	jTextStationE.requestFocusInWindow();
    }
    /**
     * Anzeige des entsprechenden Folgeelementes
     */
    private void switchComboBox() {    	
    	if (jComboBoxElement.getSelectedItem().equals("Übergangsbogen")) {
    		if (jComboBoxUeBogen.getSelectedItem().equals("UA")) {
    			jComboBoxElement.setSelectedItem("Kreisbogen");    			
    		} else if (jComboBoxUeBogen.getSelectedItem().equals("UAs")) {
    			jComboBoxElement.setSelectedItem("Kreisbogen");
    		} else if (jComboBoxUeBogen.getSelectedItem().equals("UAB")) {
    			jComboBoxElement.setSelectedItem("Kreisbogen");
    		} else if (jComboBoxUeBogen.getSelectedItem().equals("UE")) {
    			jComboBoxElement.setSelectedItem("Gerade");
    		} else if (jComboBoxUeBogen.getSelectedItem().equals("UEs")) {
    			jComboBoxElement.setSelectedItem("Gerade");
    		} else if (jComboBoxUeBogen.getSelectedItem().equals("UEB")) {
    			jComboBoxElement.setSelectedItem("Gerade");
    		}
    	} 
    	else if (jComboBoxElement.getSelectedItem().equals("Kreisbogen")) {
    		if (!jTextUeberhoehung.getText().isEmpty()) {
    			jComboBoxElement.setSelectedItem("Übergangsbogen");
    			jComboBoxUeBogen.setSelectedItem("UE");
    		}else if (jTextUeberhoehung.getText().isEmpty()) {
    			jComboBoxElement.setSelectedItem("Gerade");
    		}
    	}
    }
    
    /**
     * Löschen der ausgewählten Reihe der Tabelle
     */
    private void deleteSelectedRow(){
    	int selectedRowIndex = table.getSelectedRow();
    	if(selectedRowIndex > -1){
    		KruemmungslinienDAO removedDAO = table.removeKruemmungslinienElement(selectedRowIndex);
    		Manager.getInstance().addProjektChange(new RemoveProjektElement(removedDAO));
    	}
    	
    }
    
	@Override
	public void keyPressed(KeyEvent e) {
		if(e.getSource() == table){
			if(e.getKeyCode() == KeyEvent.VK_DELETE){
				deleteSelectedRow();
			}			
		} else if(e.getSource() == jButtonCancel){
			if(e.getKeyCode() == KeyEvent.VK_ENTER){
				jButtonCancel.doClick();
			}
		} else if(e.getSource() == jButtonOK){
			if(e.getKeyCode() == KeyEvent.VK_ENTER){
				jButtonOK.doClick();
			}
		} else if(e.getSource() == jButtonNext){
			if(e.getKeyCode() == KeyEvent.VK_ENTER){
				jButtonNext.doClick();
			}
		} 		
	}
	
	/**
	 * Eingabefelder mit den Daten zu gegebenen Element füllen.
	 * @param dao
	 */
	private void loadElement(KruemmungslinienDAO dao){
		clearInput();
		
		if (dao.getRp() != 0) {
			jTextBeta.setText(format3.format(Double.valueOf(dao.getRp())));
		}
    	jTextStation.setText(format2.format((Double.valueOf(dao.getStationierungInMeter()))));
    	jTextStationE.setText(format2.format((Double.valueOf(dao.getEndstationierungInMeter()))));
    	if (dao.getRadius() < 0 ) {
    		jCheckBoxLinksBogen.setSelected(true);
    	} else {
    		jCheckBoxRechtsBogen.setSelected(true);
    	}
    	jTextRadius.setText(Integer.valueOf((int) Math.abs(dao.getRadius())).toString());
    	if (dao.getUeberhoehung() != 0) {
    		jTextUeberhoehung.setText(Integer.valueOf(dao.getUeberhoehung()).toString());
    	}
    	jTextLaengeUeBogen.setText(format2.format((dao.getLaengeUeBogen())));
    	jComboBoxElement.setSelectedItem(dao.getElement().toString());
    	showInputFieldsForElement(dao.getElement());
    	jComboBoxUeBogen.setSelectedItem(dao.getUebergangsbogen().toString());
    	showInputFieldsForUeBogen (dao.getUebergangsbogen());
    	jTextStation.requestFocusInWindow();		
	}
	
	@Override
	public void keyReleased(KeyEvent arg0) {
		
	}
	@Override
	public void keyTyped(KeyEvent arg0) {
		
	}
	@Override
	public void mouseClicked(MouseEvent e) {
		//bei Doppelklick auf eine Zeile in der Tabelle die Daten des zugehörigen Elements in den Eingabefeldern anzeigen
		if (e.getClickCount()==2) {
			int row = table.rowAtPoint(e.getPoint());
			element2Edit = table.getElementAtRow(row);
			if(element2Edit != null){
				loadElement(element2Edit);
			}
		}		
	}
	@Override
	public void mouseEntered(MouseEvent e) {
	}
	@Override
	public void mouseExited(MouseEvent e) {
	}
	@Override
	public void mousePressed(MouseEvent e) {
	}
	@Override
	public void mouseReleased(MouseEvent e) {
	}
    	
}
    

